;(function(root) {

    // root.urls='http://192.168.0.56:808/erpbuild/';        //路径

    root.urls='/';

    // root.urls='http://gcjs.hntxrj.com/';


    var timeoutTime = 40000; //超时 40秒

    //验证是否登录

    root.CODEMESSAGE = {
        ERRORCOD : 0, //后台返回数据失败
        SUCCESSCODE : 0 //成功的code值
    }
    function extender(p,c) {
        for(var i in c){
            c[i] = p[i]
        }
    }
    // 新版成功状态码判断
    root.STATES = {
        SUCCESS : 0, //成功状态 为0
        isSuccess : function (data,success,error) {
            if(data.code == this.SUCCESS){
                if(typeof data.data === "object"){
                    // 数据正常 状态码正常的 成功
                    success(data);
                }else{
                    //状态码正常 数据不正常的 失败
                    error(data);
                }
            }else{
                //状态码正常的 失败
                error(data);
            }
        },
        ioError : function (root,data) {
            root.console.log(data && data.msg || "获取数据失败");
        },
        netError : function () {
            return "获取数据失败";
        },
        outCode : function (msg) {
            var msger = "";
            switch (msg){
                case "重复":
                    msger = "添加数据重复";
                    break;
                case "成功":
                    msger = "操作成功";
                    break;
                case "失败":
                    msger = "操作失败";
                    break;
            }
            return msger ? msger : msg;
        }
    }
    function extender(p,c){
        for(var i in c){
            p[i] = c[i];
        }

        return p;
    }




    // 通用get ajax 方式
    function sendAjax(url,json,success,error,copyer){

        json.compid = rose.util.getItem('compid');
        json.opid = rose.util.getItem('opid');
        json.token = rose.util.getItem('token');
        json.empname = rose.util.getItem('empname');

        json.admin_compid = rose.util.getItem('admin_compid');
        json.admin_opid = rose.util.getItem('admin_opid');
        json.admin_token = rose.util.getItem('admin_token');
        json.admin_empname = rose.util.getItem('admin_empname');



        $.ajax(extender({
            url : baseUrl+url,
            data : json,
            headers:{"app":"android"},
            success : function(data, textStatus, request){
                if (request.getAllResponseHeaders().indexOf('REDIRECT') != -1){
                    //这里的重定向后期要用到
                    document.location.href = window.baseUrl+"login1.html";
                    rose.util.setItem('jumpType','REDIRECT')
                    console.log('jump')
                }
                success(data);

            },
            timeout : timeoutTime,
            async: true,
            error : function(xhr,key){
                error && error();
                if(key == "timeout"){
                    try{
                        layer.closeAll();
                        layer.open({
                            content: "请求数据超时",
                            skin: 'msg',
                            time: 4
                        });
                    }catch(e){}
                }
            }
        },copyer || {}))

    }

    // 通用post 方式
    function postAjax(url,json,success,error,copyer){
        json.compid = rose.util.getItem('compid');
        json.opid = rose.util.getItem('opid');
        json.token = rose.util.getItem('token');
        json.empname = rose.util.getItem('empname');

        json.admin_compid = rose.util.getItem('admin_compid');
        json.admin_opid = rose.util.getItem('admin_opid');
        json.admin_token = rose.util.getItem('admin_token');
        json.admin_empname = rose.util.getItem('admin_empname');


        $.ajax(extender({
            url : baseUrl+url,
            type : "post",
            data : json,
            success : function(data, textStatus, request){
                if (request.getAllResponseHeaders().indexOf('REDIRECT') != -1){

                    //这里的重定向后期要用到
                    document.location.href = window.baseUrl+"login1.html";
                    rose.util.setItem('jumpType','REDIRECT')
                    console.log('jump')
                }
                success(data);
            },
            beforeSend: function () {
                // console.log(arguments,'<--------')
            },
            timeout : timeoutTime,
            async: true,
            error : function(xhr,key){
                error && error();
                if(key == "timeout"){
                    try{
                        layer.closeAll();
                        layer.open({
                            content: "请求数据超时",
                            skin: 'msg',
                            time: 4
                        });
                    }catch(e){}
                }
            }
        },copyer || {}))


    }


    //判断是否已登录
    root.denglus=function () {
        return getCookie('yanzheng');
    }


    //写入cookies
    root.setCookie=function (name,value)
    {
        var Days = 7;
        var exp = new Date();
        exp.setTime(exp.getTime() + Days*24*60*60*1000);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
        console.log(document.cookie);
    }
    //读取cookies
    root.getCookie=function (name)
    {
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg))
            return unescape(arr[2]);
        else
            return null;
    }
    //删除cookies
    root.delCookie=function(name)
    {
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval=getCookie(name);
        if(cval!=null)
            document.cookie= name + "="+cval+";expires="+exp.toGMTString();
        console.log( document.cookie)
    }


    root.getP = function(){
        // return "100|0002|27|建设单位";
        return getCookie("yanzheng");
    }


    //左侧导航权限数据
    /*标准时间转换格式  页面内调用    ***.format("yyyy-MM-dd hh:mm:ss");即可
    * */

    Date.prototype.format = function(fmt) {
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //日
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //分
            "s+" : this.getSeconds(),                 //秒
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt)) {
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        }
        for(var k in o) {
            if(new RegExp("("+ k +")").test(fmt)){
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
            }
        }
        return fmt;
    }

    root.shijians=function (zhi) {
        var oldTime = (new Date(zhi)).getTime();
        var curTime = new Date(oldTime).format("yyyy年MM月dd日");
        return curTime;
    }

    root.times=function (nS) {
        //return new Date(parseInt(nS)).toLocaleString().replace(/:\d{1,2}$/,' ');
        nS=parseInt(nS);
        var date = new Date(nS);
        var Y = date.getFullYear() + '-';
        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
        var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
        var h = (date.getHours()< 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
        var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
        var s = (date.getSeconds()< 10 ? '0' + (date.getSeconds()) : date.getSeconds());
        return Y + M + D + h + m+s;


    }




    /*禁止按钮点击
    * 参数 :name:需禁按钮名
    *
    * */
    root.Btnon=function (name) {
        $(name).attr('disabled','true').addClass('layui-btn-disabled');

    }

    /*解除按钮禁止
    * 参数:name:需要解禁按钮名
    *
    * */
    root.Btnoff=function (name) {
        $(name).removeAttr('disabled').removeClass('layui-btn-disabled');
    }

    /*
    正则判断  输入框禁止输入的内容                                       --上传前删除该备注
    */

    root.AntiSqlValid=function (oField ) {
        var re= /select|update|delete|exec|count|’|"|=|;|>|<|_|%/i;

        return re.test(oField)
    }


    /*参数  fn  调用ajaxs

    * */



    function LoadMoreFactory() {
        this.normalConfig = {
            currPage: 1, // 默认是从第一夜开始的
            pageSize: 10, // 每页条数 10条
            pageCount: 0,
            isCanSend: true, // 是否可以加载
            isLoadEnd: false, // 是否到头了
            success: function (data) {
                // data 后台给的数据
            },
            error: function (err) {
                // 失败0000
            },
            type: 'post',
            data: { //附加

            }
            // api : '调用的接口' 必传
        }
    }


    LoadMoreFactory.prototype.init = function (config) {
        // 构造函数
        $.extend(this.normalConfig, config);

        // 刚进去执行一下
        this.toLoad();

        // 去加事件
        this.addEvent();
        return this;
    }

    LoadMoreFactory.prototype.toLoad = function () {
        // 工具函数: 发ajax
        if(this.normalConfig.isLoadEnd || !this.normalConfig.isCanSend){
            return;
        }
        // 让状态变成正在发送
        this.normalConfig.isCanSend = false;
        var root = this;
        ajaxs(this.normalConfig.api, this.normalConfig.type, $.extend({
            currPage: this.normalConfig.currPage,
            pageSize: this.normalConfig.pageSize,
            p: getP()   //获取参数
        },this.normalConfig.data), function (data) {
            // success


            if(root.normalConfig.isLoadEnd){
               // 到头了

            }else{
               // 没到头
                root.normalConfig.success(data);
            }
            root.afterLoadComp(data);

        })
    }

    LoadMoreFactory.prototype.afterLoadComp = function (data) {
        // 工具函数: 解析分页
        this.normalConfig.pageCount = data.pageBean.pageCount;
        this.normalConfig.currPage++;

        this.normalConfig.isCanSend = true;

        // 判断是否到头了
        this.normalConfig.isLoadEnd = this.normalConfig.currPage > this.normalConfig.pageCount;
    }

    LoadMoreFactory.prototype.addEvent = function () {
        var root = this;
        $(window).scroll(function (e) {

            if($(this).scrollTop() + $(window).height()+20>= $(document).height() && $(this).scrollTop() > 20){
                root.toLoad();
            }
        })
    }

    LoadMoreFactory.prototype.search = function (config) {
        this.normalConfig.currPage = 1;
        this.normalConfig.isLoadEnd = false;

        console.log('before send ajax ', this)
        // this.normalConfig.data = config;

        this.toLoad();
    }

    root.LoadMore = function (config) {
        return new LoadMoreFactory().init(config);
    }





    root.gundong=function (fn) {
        //加载更多
        var load = true;
        var currPage = 1;        //调用第几页
        var pageSize =10;          // 一页多少条

        $(window).scroll( function(event){
            //判断是否显示加载
            if($(window).height()<$(document).height()){
                $('.showlists').show();
            }else{
                $('.showlists').hide();
            };

            if(!load){
                return;
            };
            if($(this).scrollTop() + $(window).height()+20>= $(document).height() && $(this).scrollTop() > 20){
                load = false;
                console.log('发送');
                fn();
            };

        })

    }



    /*ajax 前后端数据传递
    * 参数:
     * @param url   请求地址
     * @param type  请求类型   'post'/'get', 默认get
     * @param data  请求参数，post请求必传，get请求忽略
     * @param callback 回调函数用function(result)接收,
     *        data表示服务器返回数据
     *
     * @exception error未成功与服务器交互。
     */


    root.ajaxs=function(url, type, data, callback){
        if (url == '' || url == undefined) {alert('url不能为空')}
        if (type == '' || type == undefined || (type.toLowerCase() != 'get' && type.toLowerCase() != 'post' )) {
            //type未填写或不合法
            type = 'get';
        }
        $.ajax({
            url:urls+url,
            type:type,
            data:data,
            success:function(data){
                callback(data)
            },error:function(error){
                throw error
            }
        })
    }

    /*移动端事件监听
    * 参数ID: 监听对象的ID
    * fn:要执行的函数
    *
    * */

})(window)
